﻿using System;
using System.Collections.Generic;
using System.Text;

namespace PCR.Logic
{
    using PCR.Base;

    /// <summary>
    /// Patient report class that contains all the attributes of a patient's report
    /// </summary>
    internal class PatientReport : GuidObject, IPatientReport
    {
        /// <summary>
        /// Report's generation date
        /// </summary>
        public DateTime ReportDate { get; set; }

        /// <summary>
        /// Report Serial number
        /// </summary>
        public string ReportID 
        {
            get { return this._reprotID; }
            set { this._reprotID = value; }
        }
        string _reprotID = string.Empty;

        /// <summary>
        /// Patient's Name
        /// </summary>
        public string Name 
        {
            get { return this._name; }
            set { this._name = value; }
        }
        string _name = string.Empty;

        /// <summary>
        /// Patient's Age
        /// </summary>
        public UInt32 Age { get; set; }

        /// <summary>
        /// Patient's Gender
        /// </summary>
        public Gender Gender 
        {
            get { return this._gender; }
            set { this._gender = value; }
        }
        Gender _gender = Gender.WOMEN; // Default is women

        /// <summary>
        /// Patient's check date
        /// </summary>
        public DateTime CheckDate { get; set; }

        /// <summary>
        /// Patient's check date
        /// </summary>
        public string SampleID 
        {
            get { return this._sampleID; }
            set { this._sampleID = value; }
        }
        string _sampleID = string.Empty;

        /// <summary>
        /// Virus sample reveice date
        /// </summary>
        public DateTime SampleReceiveDate { get; set; }

        /// <summary>
        /// Virus check method
        /// </summary>
        public CheckMethod CheckMethod
        {
            get { return this._checkMethod; }
            set { this._checkMethod = value; }
        }
        protected CheckMethod _checkMethod = CheckMethod.OTHER;

        /// <summary>
        /// Virus sample type
        /// </summary>
        public SampleType SampleType
        {
            get { return this._sampleType; }
            set { this._sampleType = value; }
        }
        protected SampleType _sampleType = SampleType.OTHER;

        /// <summary>
        /// Virus sample state
        /// </summary>
        public SampleState SampleState
        {
            get { return this._sampleState; }
            set { this._sampleState = value; }
        }
        protected SampleState _sampleState = SampleState.UNKNOWN;

        /// <summary>
        /// Patient virus list, add or remove item from the list
        /// </summary>
        public IList<IPatientVirus> PatientVirusList
        {
            get { return this._patientVirusList; }
        }
        protected IList<IPatientVirus> _patientVirusList = new List<IPatientVirus>();

        /// <summary>
        /// Cell principle wrote by doctor
        /// </summary>
        public string CellPrinciple 
        {
            get { return this._cellPrinciple; }
            set { this._cellPrinciple = value; }
        }
        string _cellPrinciple = string.Empty;

        /// <summary>
        /// Pathology Principle wrote by doctor
        /// </summary>
        public string PathologyPrinciple 
        {
            get { return this._pathologyPrinciple; }
            set { this._pathologyPrinciple = value; }
        }
        string _pathologyPrinciple = string.Empty;
    }
}
